package com.iris.live.services.services;

import com.iris.live.services.data.models.*;
import com.iris.live.services.models.PageData;
import com.iris.live.services.models.RequestBase;
import com.iris.live.services.models.ResultData;
import com.iris.live.services.vo.aftermarket.AfterMarketObj;

import java.io.InputStream;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * Created by sxy on 2016/8/1
 */
public interface AfterMarketService {

    PageData getProductList(String permit, GetProductListRequest request);

    List getProductClassify(int type, String permit);

    List getProductType(Integer queryType);

    List getNCType();

    PageData getProductCombo(String permit, GetProductComboRequest request);

    List getProductByComboID(int comboID);

    Map getProduct(int id);

    Lsh精品信息Model saveProduct(Lsh精品信息Model model);

    Lsh精品图片Model saveProductImage(InputStream input, String fileName, int id, Integer picId);

    boolean saveProductStatus(int id, String status);

    Lsh套餐信息Model getProductCombo(int id);

    Lsh套餐信息Model saveProductCombo(Lsh套餐信息Model model);

    Lsh套餐图片Model saveProductComboImage(InputStream input, String fileName, int id, Integer picId);

    boolean saveProductComboStatus(int id, String status);

    PageData getAfterMarketOrder(String permit, GetAfterMarketOrderRequest request);

    报价单表Model saveOrder(报价单表Model model);

    List saveOrderProductInfoBatch(List<报价精品详细表精品Model> modelList);

    Lsh精品促销Model getPromotionByProductId(int productId, String source);

    Lsh精品促销Model savePromotion(Lsh精品促销Model model);

    public Map findQualityInfoByFuzzyId(Integer id, String source);

    public boolean isExistQualityInfo(String productNum, String source);

    public Map findComboInfoByProductNumAndUser(String productNum, String createUser);

    public List findQualityInfoByComboId(Integer comboId);

    public List getAllArea();

    public boolean isExistComboInfo(String productNum, String createUser);

    public List getFollowCarInfoByPermit(String permit);

    public boolean saveFollowCarInfoList(List<Lsh随车项目设置Model> reqList);

    public Map findQualityInfoByProductNumAndSource(String productNum, String source);

    public List saveComboInfo(GetSaveComboInfo request);

    public Map saveQualityInfo(List<GetSaveAfterQualityInfo> request) throws ParseException;

    public boolean isExistfallowCar(IsExistfallowCarRequest req);

    List getAllQualityInfoBySource(String source);

    boolean saveBusinessticketsRelyInfo(List<getBusinessticketsRelyInfo> re);

    List getAfterMarketTicketDetailList(int ids, getBusinessticketsRelyInfo re);

    Lsh精品信息Model getAfterMarketOrdersProductById(String productId);

    boolean saveRefoundAfterMarketOrderProductDetail(getRefoundAfterMarketOrderProductDetail request);

    PageData getAfterMarketProductTypeAndDetail(getAfterMarketProductTypeAndDetail request);

    boolean   saveAddafterMarketOrdersAndallupdate( List<getAddafterMarketOrdersAndallupdate>requestlist,String permit ,String postuser,String bianjia);

    Map getdingdanbianhao(String ids, String permit);

    PageData saveOrderStatusAndbaocun(List<getOrderStatusAndBaocun> requestlist);

    List getAfterMarketShopAllId(String ids);

    boolean saveBusinesstickets(List<getBusinesstickets> lblist);

    PageData getBusinessticketsList(RequestBase req);

    boolean saveBusinessticketsStatus(List<getBusinessticketsStatus> rel);

    boolean saveBusinessticketsControllerStatus(getBusinessticketsStatus rel);

    Map getpreIdByTaxNo(getBusinessticketsStatus relist);

    List getBusniessByName(List<getBusinessticketsStatus> relist);

    PageData saveOederstatusAndmsg(List<getOederstatusAndmsg> requestlist, String d, String f);

    boolean saveShopDetailStatusAddninthDay(List<getBusinessticketsStatus> relist);

    boolean saveAfterMarketOrderAndAllDetail(getAfterMarketOrderAndAllDetail relist);

    List getAfterMarketWeekDailyDetail(String datee);

    List getAfterMarketWeekDailyDetailBysole(String datee);

    List getAfterMarketWeekonesones();

    PageData getAfterMarketWeekonestwo(RequestBase re);

    List getAfterMarketWeekonestwos(RequestBase re);

    boolean saveAfterMarketWeekonesthree(AfterMarketService.getAfterMarketOrderShopCarDetail re);

    boolean saveAfterMarketWeekonesfour(List<AfterMarketService.GetAfterQualityInfoByParams> re);

    Map getAddorderstatusshopids(GetAfterQualityInfoByParams re);

    boolean saveStausBusinesSoleids(GetAfterQualityInfoByParams re);

    ResultData getVendorMailList(RequestBase re);

    ResultData deleteSingleVendorMail(getVendorInfos re, String username, String permit);

    ResultData updateSingleVendorMailInfo(List<getVendorDetailInfos> re, String username, String permit);

    int isUpdateCombInfoByQuaId(IsUpdateCombInfoByQuaId param) throws ParseException;

    /**
     *  删除精品信息
     * @param productId 精品编号
     * @return 返回
     */
    ResultData deleteProductInfo(Integer productId);

    /**
     * 条件查询精品信息
     * @param classifyId 分类ID
     * @param source 采购渠道
     * @return
     */
    List<BoutiqueModel> findListBySourceAndClassifyId(Integer classifyId, String source);

    AfterMarketObj GetAfterMarketInfoFromOther(String permit, String username, String shopId, String shopName,
                                                              String unit, String salePrice, String cheXing, String sort,
                                                              int thisPage, int pageSize);

    /**
     * 获取子公司编码
     * @param permit
     * @return
     */
    PermitCodeModel getCompanyCode(String permit);

    static  class getBusinesstickets{

        public Integer btId;
        public String btTrueId;
        public String btName;
        public String btLogo;
        public String btStatus; //默认为 启用
        public Timestamp btUpdateDt;
        public String btTaxNo;
        public String btAddrAndTel;
        public String btBankAccount;
        public String btMailAddr;
        public String btRemarks;
        public String btSign;
        public String firstreviewPerson; // '收款人',
        public String endreviewPerson;  // 复核人

        public String shopids;//商品版本编号

    }

    static class GetProductListRequest extends RequestBase {
        public int type;
        public int classify;
        public String source;    //来源
        public String product;
        public String productCode;
        public int NC;
        public String area;
        public String car;
        public int productID;  //产品ID
        public String factory;
        public String totalCount;

        public String carSource;    //车型来源
        public String brand;     //品牌
        public String series;    //车系（级别）
        public String carType;   //车型
        public String carParticulars; //车型详细（车款）
    }

    static class GetProductComboRequest extends RequestBase {
        public String area;
        //public String car;
        public String comboID;
        public String comboName;
        public String factory;
        public String createUser;
        public String carSource;    //车型来源
        public String brand;     //品牌
        public String series;    //车系（级别）
        public String carType;   //车型
        public String carParticulars; //车型详细（车款）
    }

    // 这个 就是订单表的 各种 筛选条件 ，
    static class GetAfterMarketOrderRequest extends RequestBase{
        // 这是新添加的 这是 涉及的表 是 报价精品详细表
        public String comboStatus;//  条目的 状态 有三种

        // 涉及 的是 ValueModel
        public Timestamp purchaseDt; // 采购时间
        public Timestamp modifyDt; // 更新时间
        public Timestamp refundDt; // 退款时间

        public BigDecimal refundAmount;// 退款金额
        public String refundReason;// 退款理由

        public int id;// _精品的 主键

        public String idsAndticket; // 用于 连接开票

      // 订单号
         public String OrderId;

        public String carType;//车型  车型表
        public String VIN; // 车架号   库存表
        // 经销商名称
        public String jingxiaoshangmingcheng;
        // 厂商
        public String changshangmingcheng;
        //  产品编号
        public String productbianhaoIds;
        // 名称
        public String productName;

        // 精品信息表中
        // 订单状态
        public String orderStatus;
        // 产品种类
        public String productType;
        // 产品分类
        public String productClassifyTypes;


        public int type;
        public int classify;

        // 车主姓名
        public String chezhuxingming;
        // 申请部门
        public String shenqignbumeng;
        // 开始预计时间
        public String staryujishigongriqi;
        // 结束 预计
        public String endyujishigongriqi;
        // 开始施工
        public String starshijishigongriqi;
        // 结束施工
        public String endshijishigongriqi;
        // 开始采购时间
        public String starcaigouriqi;
        // 结束采购
        public String endcaigouriqi;
// 施工种类
        public String shigongzhonglei;
        public String wip;
        public String taxNo; // 发票号
        public String cid; //  新添加 的 id 和 comid
        public String comboid;

        public String purchaseSource;//采购来源
    }

    //保存精品相关信息请求参数
    static class GetSaveAfterQualityInfo {
        //LSH精品信息参数
        public Integer 精品编号;
        public String 采购来源;
        public String 产品编号;
        public String 产品名称;
        public String 产品型号;
        public String 颜色;
        public String 厂商;
        public String 标配功能;
        public String 集团采购价未税;
        public String 集团采购价含税;
        public String 集团采购毛利率;
        public String 经销商采购价未税;
        public String 经销商采购价含税;
        public String 经销商采购毛利未税;
        public String 经销商销售价未税;
        public String 经销商销售价含税;
        public String 经销商销售毛利率未税;
        public String 单品促销状态;
        public String 功能;
        public String 特征;
        public String 好处;
        public String 启用状态;
        public Timestamp 创建时间;
        public String 更新账号;
        public Timestamp 更新时间;
        //LSH精品促销参数
        public String 促销开始日期;
        public String 促销结束日期;
        public String 经销商采购价未税促销;
        public String 经销商采购价含税促销;
        public String 经销商销售价未税促销;
        public String 经销商销售价含税促销;
        public String 经销商采购折扣率促销;
        public String 经销商销售折扣率促销;
        //其他
        public String 产品种类;
        public String 产品分类;
        public String nc分类;
        public String 适用车型编号;
        public String 适用区域;
        public Integer 精品促销编号;

        public String 精品开始日期;
        public String 精品结束日期;
        public String 是否更新套餐日期;


    }

    //保存套餐相关信息请求参数
    static class GetSaveComboInfo {
        //LSH套餐信息参数
        public Integer 套餐编号;
        public Integer 分类编号;
        public String 创建方;
        public Integer nc编号;
        public String 产品编号;
        public String 产品名称;
        public String 厂商;
        public String 功能;
        public String 特征;
        public String 好处;
        public String 是否套餐;
        public String 限量状态;
        public String 限量数量;
        public java.util.Date 套餐开始日期;
        public java.util.Date 套餐结束日期;
        public String 集团采购价未税;
        public String 集团采购价含税;
        public String 集团毛利率;
        public String 套餐销售原价;
        public String 套餐销售价含税;
        public String 套餐销售价未税;
        public String 是否统一折扣;
        public String 套餐折扣;
        public String 套餐采购价未税;
        public String 套餐采购价含税;
        public String 套餐毛利;
        public String 套餐毛利率;
        public String 启用状态;
        public Timestamp 创建时间;
        public String 更新账号;
        public Timestamp 更新时间;
        //LSH套餐适用车型参数
        public String 适用车型编号;
        //LSH套餐适用区域参数
        public String 适用区域;
        //LSH精品套餐详细参数
        public List<Lsh精品套餐详细Model> list;
    }

    static class GetAfterQualityInfoByParams extends RequestBase {
        public String productNum;//产品编号     // 开票产品
        public String source;//采购来源          //企业商品编码
        public String createUser;//创建方
        public Integer qualityId;//精品编号   分类编号
    }

    static class getMarkInfoCarAndPhone {
        public String jinPingNum;//精品编号
        public String source;//采购来源
    }

    static class IsExistfallowCarRequest{
        public String permit;
        public Integer 车型编号;
        public String 启用时间;
        public String 停用时间;
        public Integer 项目成本编号;
    }

// 保存 在 购物车的 订单信息

    // 保存的 详细的 精品的 施工信息 属于 报价精品详细表_精品
    static class getAfterMarketOrderProductDetail{
        public String type;
        public Date 预计施工时间;
        public Date 实际施工日期;
        public String 施工种类;
        public String 备注;
    }


// 保存 的是 退货的 金额 和 理由 和 一些

    static class getAfterMarketOrderShopCarDetail{
        public String type; // 开票商品名称

        public String 备注; //企业商品编码
    }


    // 获取的是 精品分类的 信息  筛选条件 需要分页

    static class  getRefoundAfterMarketOrderProductDetail{
        public String type;
        public BigDecimal refoundMoney;
        public String 备注;
        public String reason;   // 退款时间
        public String modifyDt; // 退款时间
        public String status;    // 直传的 状态
        public Integer ids;    // 主键
        public Integer conid;
        public Integer productId;
        public Integer bianhao;   // 编号

    }

    static class getAfterMarketProductTypeAndDetail extends RequestBase{
        public String type;

        public String 分类编号;

        public String 产品分类;
    }

    // 根据 经销商 获取 去完整的 信息  或者 是各种的 筛选
    static class getBillDetailistByDealer extends RequestBase{

        public String type;

    }

        // 根据 经销商 获取 去完整的 信息  或者 是各种的 筛选
    static class getOederstatusAndmsg extends RequestBase{

            public int id;
            public int conid;
            public int productId;
            public int bianhao;
            public int sums;


    }

    // 新增的精品订单
  static class  getAddafterMarketOrdersAndallupdate extends RequestBase{
        public String issuiche;// 是否随车
      public String productId;
     // public int bianhao;
      public int shuliang;
      public BigDecimal shoujia;
      public String mingcheng;
      public BigDecimal chengben;

  }

// 11.11 的修改 订单状态的
    static class getOrderStatusAndBaocun extends RequestBase{

        public int id;
        public String orderStatus;

    }

    class getBusinessticketsStatus {

        public int ids; // 主键
        public String status;// 状态


    }


    //11.18 的保存 开票表 附表的 信息
    class getBusinessticketsRelyInfo {

        //虚拟开票号 +  _精品的 id 主键 +已导出+ 主表的 主键
        public String VrTaxNo;
        public String productid;// _精品的 id 主键
        public int btId;   //主表的 主键
        public String trueTaxNo; //真实的税号
    }

    // 修改订单
    class getAfterMarketOrderAndAllDetail {
        public int asum; // 数量  价格
        public String aprice;
        public String isTaoCang;//是否套餐
        public List<getzujian> relistes;
    }

    class getzujian {

        public int aid;  // _精品的 主键
        public int atrueid;  // ——精品的 编号
        public int acomid;
        public int aproductId;
    }

    class getVendorInfos {
        public String vendorName;// 厂商名字
        public String productId;// 精品分类

    }

    class getVendorDetailInfos {
        public String vendorName;// 厂商名字
        public String productId;// 精品分类
        public String id; // 主键id  有则 更新 无则插入
        public String addrTo; // 收件人
        public String addrCc;// 抄送人
        public String title; // 主题
        public String content; // 内容
    }

    class IsUpdateCombInfoByQuaId {
        public String 精品编号;
        public String 精品开始日期;
        public String 精品结束日期;
    }

    class getBoutique extends RequestBase{

        public String checkId;
        public String shopId;
        public String shopName;
        public String unit;
        public String cheXing;
        public String sort;
        public String salePrice;
    }

    class getThreeBoutique {
        public String shopId;
        public String permit;
        public String shopName;
        public String classifyName;
        public Integer page;
        public Integer pageSize;
    }

}
